package cn.tedu.hospitalgroupproject.server.content.dao.persist.repository;

import cn.tedu.hospitalgroupproject.server.common.pojo.vo.PageData;
import cn.tedu.hospitalgroupproject.server.content.pojo.entity.Doctor;
import cn.tedu.hospitalgroupproject.server.content.pojo.vo.DoctorListItemVO;
import cn.tedu.hospitalgroupproject.server.content.pojo.vo.DoctorStandardVO;

import java.io.Serializable;

public interface IDoctorRepository {
    /*
    * 插入医生数据*/
    int insert(Doctor doctor);

    /*根据医生ID删除对应的医生*/
    int deleteById(Long id);

    /**
     * 根据ID修改医生数据
     *
     * @param doctor 封装了被修改数据的ID和新数据的对象
     * @return 受影响的行数
     */
    int updateById(Doctor doctor);
    /**
     * 根据id修改医生是否为管理员权限
     *
     * @param id 医生ID
     * @param isAdmin   是否为管理员
     * @return 受影响的行数
     */
    int updateIsAdminById(Long id, Integer isAdmin);
    /**
     * 根据名称统计当前门诊ID下医生数量，通常用于删除门诊时做相应的检查
     *
     * @param id 门诊ID
     * @return 匹配此门诊ID的医生数据的数量
     */
    int countByClinicId(Long id);

    /**
     * 根据名称统计当前职称ID下医生数量，通常用于删除职称时做相应的检查
     *
     * @param id 职称ID
     * @return 匹配此职称ID的医生数据的数量
     */
    int countByTitleId(Long id);


    /*根据指定ID获取医生数据*/
    DoctorStandardVO getStandardById(Long id);
    /**
     * 查医生列表
     *
     * @param pageNum  页码
     * @param pageSize 每条记录数
     * @return 医生列表的分页数据
     */
    PageData<DoctorListItemVO> list(Integer pageNum, Integer pageSize);

}
